"""
Copyright © 2021 Walkline Wang (https://walkline.wang)
Gitee: https://gitee.com/walkline/micropython-qrcode-research
"""
from collections import OrderedDict


class QRCodeConst(object):
	ALIGNMENT_PATTERNS_MAP = {
		1: [0],
		2: [1, 6, 18],
		3: [1, 6, 22],
		4: [1, 6, 26],
		5: [1, 6, 30],
		6: [1, 6, 34],
		7: [6, 6, 22, 38],
		8: [6, 6, 24, 42],
		9: [6, 6, 26, 46],
		10: [6, 6, 28, 50],
		11: [6, 6, 30, 54],
		12: [6, 6, 32, 58],
		13: [6, 6, 34, 64],
		14: [13, 6, 26, 46, 66],
		15: [13, 6, 26, 48, 70],
		16: [13, 6, 26, 50, 74],
		17: [13, 6, 30, 54, 78],
		18: [13, 6, 30, 56, 82],
		19: [13, 6, 30, 58, 86],
		20: [13, 6, 34, 64, 90],
		21: [22, 6, 28, 50, 72, 94],
		22: [22, 6, 26, 50, 74, 98],
		23: [22, 6, 30, 54, 78, 102],
		24: [22, 6, 28, 54, 80, 106],
		25: [22, 6, 32, 58, 84, 110],
		26: [22, 6, 30, 58, 86, 114],
		27: [22, 6, 34, 62, 90, 118],
		28: [33, 6, 26, 50, 74, 98, 122],
		29: [33, 6, 30, 54, 78, 102, 126],
		30: [33, 6, 26, 52, 78, 104, 130],
		31: [33, 6, 30, 56, 82, 108, 134],
		32: [33, 6, 34, 60, 86, 112, 138],
		33: [33, 6, 30, 58, 86, 114, 142],
		34: [33, 6, 34, 62, 90, 118, 146],
		35: [46, 6, 30, 54, 78, 102, 128, 150],
		36: [46, 6, 24, 50, 76, 102, 128, 154],
		37: [46, 6, 28, 54, 80, 106, 132, 158],
		38: [46, 6, 32, 58, 84, 110, 136, 162],
		39: [46, 6, 26, 54, 82, 110, 138, 166],
		40: [46, 6, 30, 58, 86, 114, 142, 170],
	}

	ALPHANUMERIC_MODE_CHARSET_TABLE = {
		'0': 0,
		'1': 1,
		'2': 2,
		'3': 3,
		'4': 4,
		'5': 5,
		'6': 6,
		'7': 7,
		'8': 8,
		'9': 9,
		'A': 10,
		'B': 11,
		'C': 12,
		'D': 13,
		'E': 14,
		'F': 15,
		'G': 16,
		'H': 17,
		'I': 18,
		'J': 19,
		'K': 20,
		'L': 21,
		'M': 22,
		'N': 23,
		'O': 24,
		'P': 25,
		'Q': 26,
		'R': 27,
		'S': 28,
		'T': 29,
		'U': 30,
		'V': 31,
		'W': 32,
		'X': 33,
		'Y': 34,
		'Z': 35,
		' ': 36,
		'$': 37,
		'%': 38,
		'*': 39,
		'+': 40,
		'-': 41,
		'.': 42,
		'/': 43,
		':': 44
	}

	# data format
	# DF_ECI_MODE = '0111'
	DF_NUMERIC_MODE = '0001' # 数字编码，数字编码的范围为 0~9
	DF_ALPHANUMERIC_MODE = '0010' # 字符编码，字符编码的范围有：数字 0~9；大写 A~Z（无小写）；几个符号$ % * + - . / 和空格
	DF_BYTE_MODE = '0100' # 字节编码，可以是 0-255 的 ISO-8859-1 字符。有些二维码的扫描器可以自动检测是否是 UTF-8 的编码
	DF_KANJI_MODE = '1000' # 日文编码，日文编码同时也是双字节编码，同样也可以用于中文编码
	DF_HANZI_MODE = '1101'
	DF_STRUCTURED_APPEND_MODE = '0011' # 混合编码，说明该二维码中包含了多种编码格式
	DF_TERMINATOR = '0000'
	# DF_EXTENDED_CHANNEL_INTERPRETATION_MODE = 4 # 特殊字符集，主要用于特殊的字符集，并不是所有的扫描器都支持这种编码
	# DF_FNC1_MODE = 6 # 特殊行业编码，主要是给一些特殊的工业或行业用的，如GS1条形码等

	DATA_FORMAT_BIT_LENGTH_MAP_1_TO_9 = {
		DF_NUMERIC_MODE: 10,
		DF_ALPHANUMERIC_MODE: 9,
		DF_BYTE_MODE: 8,
		DF_KANJI_MODE: 8
	}

	DATA_FORMAT_BIT_LENGTH_MAP_10_TO_26 = {
		DF_NUMERIC_MODE: 12,
		DF_ALPHANUMERIC_MODE: 11,
		DF_BYTE_MODE: 16,
		DF_KANJI_MODE: 10
	}

	DATA_FORMAT_BIT_LENGTH_MAP_27_TO_40 = {
		DF_NUMERIC_MODE: 14,
		DF_ALPHANUMERIC_MODE: 13,
		DF_BYTE_MODE: 16,
		DF_KANJI_MODE: 12
	}

	# 版本对应剩余位
	DATA_CAPACITY = {
		1: 0,
		2: 7,
		3: 7,
		4: 7,
		5: 7,
		6: 7,
		7: 0,
		8: 0,
		9: 0,
		10: 0,
		11: 0,
		12: 0,
		13: 0,
		14: 3,
		15: 3,
		16: 3,
		17: 3,
		18: 3,
		19: 3,
		20: 3,
		21: 4,
		22: 4,
		23: 4,
		24: 4,
		25: 4,
		26: 4,
		27: 4,
		28: 3,
		29: 3,
		30: 3,
		31: 3,
		32: 3,
		33: 3,
		34: 3,
		35: 0,
		36: 0,
		37: 0,
		38: 0,
		39: 0,
		40: 0
	}

	ECL_L = '01'
	ECL_M = '00'
	ECL_Q = '11'
	ECL_H = '10'

	ERROR_CORRECTION_LEVEL_MAP = {
		ECL_L: OrderedDict({
			# data_codewords(数据码字数), total data bit(数据位数), numeric, alphanumeric, byte, kanji,
			# [ec_count(纠错码字数), [ec_block](纠错块数), [c, k, r](每一块的纠错代码，c：码字总数；k：数据吗字数；r：纠错容量)]
			1: [19, 152, 41, 25, 17, 10, [7, [1], [[26, 19, 2]]]],
			2: [34, 272, 77, 47, 32, 20, [10, [1], [[44, 34, 4]]]],
			3: [55, 440, 127, 77, 53, 32, [15, [1], [[70, 55, 7]]]],
			4: [80, 640, 187, 114, 78, 48, [20, [1], [[100, 80, 10]]]],
			5: [108, 864, 255, 154, 106, 65, [26,[1], [[134, 108, 13]]]],
			6: [136, 1088, 322, 195, 134, 82, [36, [2], [[86, 68, 9]]]],
			7: [156, 1248, 370, 224, 154, 95, [40, [2], [[98, 78, 10]]]],
			8: [194, 1552, 461, 279, 192, 118, [48, [2], [[121, 97, 12]]]],
			9: [232, 1856, 552, 335, 230, 141, [60, [2], [[146, 116, 15]]]],
			10: [274, 2192, 652, 395, 271, 167, [72, [2, 2], [[86, 68, 9], [87, 69, 9]]]],
			11: [324, 2592, 772, 468, 321, 198, [80, [4], [[101, 81, 10]]]],
			12: [370, 2960, 883, 535, 367, 226, [96, [2, 2], [[116, 92, 12], [117, 93, 12]]]],
			13: [428, 3424, 1022, 619, 425, 262, [104, [4], [[133, 107, 13]]]],
			14: [461, 3688, 1101, 667, 458, 282, [120, [3, 1], [[145, 115, 15], [146, 116, 15]]]],
			15: [523, 4184, 1250, 758, 520, 320, [132, [5, 1], [[109, 87, 11], [110, 88, 11]]]],
			16: [589, 4712, 1408, 854, 586, 361, [144, [5, 1], [[122, 98, 12], [123, 99, 12]]]],
			17: [647, 5176, 1548, 938, 644, 397, [168, [1, 5], [[135, 107, 14], [136, 108, 14]]]],
			18: [721, 5768, 1725, 1046, 718, 442, [180, [5, 1], [[150, 120, 15], [151, 121, 15]]]],
			19: [795, 6360, 1903, 1153, 792, 488, [196, [3, 4], [[141, 113, 14], [142, 114, 14]]]],
			20: [861, 6888, 2061, 1249, 858, 528, [224, [3, 5], [[135, 107, 14], [136, 108, 14]]]],
			21: [932, 7456, 2232, 1352, 929, 572, [224, [4, 4], [[144, 116, 14], [145, 117, 14]]]],
			22: [1006, 8048, 2409, 1460, 1003, 618, [252, [2, 7], [[139, 111, 14], [140, 112, 14]]]],
			23: [1094, 8752, 2620, 1588, 1091, 672, [270, [4, 5], [[151, 121, 15], [152, 122, 15]]]],
			24: [1174, 9392, 2812, 1704, 1171, 721, [300, [6, 4], [[147, 117, 15], [148, 118, 15]]]],
			25: [1276, 10208, 3057, 1853, 1273, 784, [312, [8, 4], [[132, 106, 13], [133, 107, 13]]]],
			26: [1370, 10960, 3283, 1990, 1367, 842, [336, [10, 2], [[142, 114, 14], [143, 115, 14]]]],
			27: [1468, 11744, 3517, 2132, 1465, 902, [360, [8, 4], [[152, 122, 15], [153, 123, 15]]]],
			28: [1531, 12248, 3669, 2223, 1528, 940, [390, [3, 10], [[147, 117, 15], [148, 118, 15]]]],
			29: [1631, 13048, 3909, 2369, 1628, 1002, [420, [7, 7], [[146, 116, 15], [147, 117, 15]]]],
			30: [1735, 13880, 4158, 2520, 1732, 1066, [450, [5, 10], [[145, 115, 15], [146, 116, 15]]]],
			31: [1843, 14744, 4417, 2677, 1804, 1132, [480, [13, 3], [[145, 115, 15], [146, 116, 15]]]],
			32: [1955, 15640, 4686, 2840, 1952, 1201, [510, [17], [[145, 115, 15]]]],
			33: [2071, 16568, 4965, 3009, 2068, 1273, [540, [17, 1], [[145, 115, 15], [146, 116, 15]]]],
			34: [2191, 17528, 5253, 3183, 2188, 1347, [570, [13, 6], [[145, 115, 15], [146, 116, 15]]]],
			35: [2306, 18448, 5529, 3351, 2303, 1417, [570, [12, 7], [[151, 121, 15], [152, 122, 15]]]],
			36: [2434, 19472, 5836, 3537, 2431, 1496, [600, [6, 14], [[151, 121, 15], [152, 122, 15]]]],
			37: [2566, 20528, 6153, 3729, 2563, 1577, [630, [17, 4], [[152, 122, 15], [153, 123, 15]]]],
			38: [2702, 21616, 6479, 3927, 2699, 1661, [660, [4, 18], [[152, 122, 15], [153, 123, 15]]]],
			39: [2812, 22496, 6743, 4087, 2809, 1729, [720, [20, 4], [[147, 117, 15], [148, 118, 15]]]],
			40: [2956, 23648, 7089, 4296, 2953, 1817, [750, [19, 6], [[148, 118, 15], [149, 119, 15]]]]
		}),
		ECL_M: OrderedDict({
			1: [16, 128, 34, 20, 14, 8, [10, [1], [[26, 19, 2]]]],
			2: [28, 224, 63, 38, 26, 16, [16, [1], [[44, 28, 8]]]],
			3: [44, 352, 101, 61, 42, 26, [26, [1], [[70, 44, 13]]]],
			4: [64, 512, 149, 90, 62, 38, [36, [2], [[50, 32, 9]]]],
			5: [86, 688, 202, 122, 84, 52, [48, [2], [[67, 43, 12]]]],
			6: [108, 864, 255, 154, 106, 65, [64, [4], [[43, 27, 8]]]],
			7: [124, 992, 293, 178, 122, 75, [72, [4], [[49, 31, 9]]]],
			8: [154, 1232, 365, 221, 152, 93, [88, [2, 2], [[60, 38, 11], [61, 39, 11]]]],
			9: [182, 1456, 432, 262, 180, 111, [110, [3, 2], [[58, 36, 11], [59, 37, 11]]]],
			10: [216, 1728, 513, 311, 213, 131, [130, [4, 1], [[69, 43, 13], [70, 44, 13]]]],
			11: [254, 2032, 604, 366, 251, 155, [150, [1, 4], [[80, 50, 15], [81, 51, 15]]]],
			12: [290, 2320, 691, 419, 287, 177, [176, [6, 2], [[58, 36, 11], [59, 37, 11]]]],
			13: [334, 2672, 796, 483, 331, 204, [198, [8, 1], [[59, 37, 11], [60, 38, 11]]]],
			14: [365, 2920, 871, 528, 362, 223, [215, [4, 5], [[64, 40, 12], [65, 41, 12]]]],
			15: [415, 3320, 991, 600, 412, 254, [240, [5, 5], [[65, 41, 12], [66, 42, 12]]]],
			16: [453, 3624, 1082, 656, 450, 277, [280, [7, 3], [[73, 45, 14], [74, 46, 14]]]],
			17: [507, 4056, 1212, 734, 504, 310, [308, [10, 1], [[74, 46, 14], [75, 47, 14]]]],
			18: [563, 4504, 1346, 816, 560, 345, [338, [9, 4], [[69, 43, 13], [70, 44, 13]]]],
			19: [627, 5016, 1500, 909, 624, 384, [364, [3, 11], [[70, 44, 13], [71, 45, 13]]]],
			20: [669, 5352, 1600, 970, 666, 410, [416, [3, 13], [[67, 41, 13], [68, 42, 13]]]],
			21: [714, 5712, 1708, 1035, 711, 438, [644, [17, 6], [[50, 22, 14], [51, 23, 14]]]],
			22: [782, 6256, 1872, 1134, 779, 480, [476, [17], [[74, 46, 14]]]],
			23: [860, 6880, 2059, 1248, 857, 528, [504, [4, 14], [[75, 47, 14], [76, 48, 14]]]],
			24: [914, 7312, 2188, 1326, 911, 561, [560, [6, 14], [[73, 45, 14], [74, 46, 14]]]],
			25: [1000, 8000, 2395, 1451, 997, 614, [588, [8, 13], [[75, 47, 14], [76, 48, 14]]]],
			26: [1062, 8496, 2544, 1542, 1059, 652, [644, [19, 4], [[74, 46, 14], [75, 47, 14]]]],
			27: [1128, 9024, 2701, 1637, 1125, 692, [700, [22, 3], [[73, 45, 14], [74, 46, 14]]]],
			28: [1193, 9544, 2857, 1732, 1190, 732, [728, [3, 23], [[73, 45, 14], [74, 46, 14]]]],
			29: [1267, 10136, 3035, 1839, 1264, 778, [784, [21, 7], [[73, 45, 14], [74, 46, 14]]]],
			30: [1373, 10984, 3289, 1994, 1370, 843, [812, [19, 10], [[75, 47, 14], [76, 48, 14]]]],
			31: [1455, 11640, 3486, 2113, 1452, 894, [868, [2, 29], [[74, 46, 14], 75, 47, 14]]],
			32: [1541, 12328, 3693, 2238, 1538, 947, [924, [10, 23], [[74, 46, 14], [75, 47, 14]]]],
			33: [1631, 13048, 3909, 2369, 1628, 1002, [980, [14, 21], [[74, 46, 14], [75, 47, 14]]]],
			34: [1725, 13800, 4134, 2506, 1722, 1060, [1036, [14, 23], [[74, 46, 14], [75, 47, 14]]]],
			35: [1812, 14496, 4343, 2632, 1809, 1113, [1064, [12, 26], [[75, 47, 14], [76, 48, 14]]]],
			36: [1914, 15312, 4588, 2780, 1911, 1176, [1120, [6, 34], [[75, 47, 14], [76, 48, 14]]]],
			37: [1992, 15936, 4775, 2894, 1989, 1224, [1204, [29, 14], [[74, 46, 14], [75, 47, 14]]]],
			38: [2102, 16816, 5039, 3054, 2099, 1292, [1260, [13, 32], [[74, 46, 14], [75, 47, 14]]]],
			39: [2216, 17728, 5313, 3220, 2213, 1362, [1316, [40, 7], [[75, 47, 14], [76, 48, 14]]]],
			40: [2334, 18672, 5596, 3391, 2331, 1435, [1372, [18, 31], [[75, 47, 14], [76, 48, 14]]]]
		}),
		ECL_Q: OrderedDict({
			1: [13, 104, 27, 16, 11, 7, [13, [1], [[26, 13, 6]]]],
			2: [22, 176, 48, 29, 20, 12, [22, [1], [[44, 22, 11]]]],
			3: [34, 272, 77, 47, 32, 20, [36, [2], [[35, 17, 9]]]],
			4: [48, 384, 111, 67, 46, 28, [52, [2], [[50, 24, 13]]]],
			5: [62, 496, 144, 87, 60, 37, [72, [2, 2], [[33, 15, 9], [34, 16, 9]]]],
			6: [76, 608, 178, 108, 74, 45, [96, [4], [[43, 19, 12]]]],
			7: [88, 704, 207, 125, 86, 53, [108, [2, 4], [[32, 14, 9], [33, 15, 9]]]],
			8: [110, 880, 259, 157, 108, 66, [132, [4, 2], [[40, 18, 11], [41, 19, 11]]]],
			9: [132, 1056, 312, 189, 130, 80, [160, [4, 4], [[36, 16, 10], [37, 17, 10]]]],
			10: [154, 1232, 364, 221, 151, 93, [192, [6, 2], [[43, 19, 12], [44, 20, 12]]]],
			11: [180, 1440, 427, 259, 177, 109, [224, [4, 4], [[50, 22, 14], [51, 23, 14]]]],
			12: [206, 1648, 489, 296, 203, 125, [260, [4, 6], [[46, 20, 13], [47, 21, 13]]]],
			13: [244, 1952, 580, 352, 241, 149, [288, [8, 4], [[44, 20, 12], [45, 21, 12]]]],
			14: [261, 2088, 621, 376, 258, 159, [320, [11, 5], [[36, 12, 12], [37, 13, 12]]]],
			15: [295, 2360, 703, 426, 292, 180, [360, [5, 7], [[54, 25, 15], [55, 25, 15]]]],
			16: [325, 2600, 775, 470, 322, 198, [408, [15, 2], [[43, 19, 12], [44, 20, 12]]]],
			17: [367, 2936, 876, 531, 364, 224, [448, [1, 15], [[50, 22, 14], [51, 23, 14]]]],
			18: [397, 3176, 948, 574, 394, 243, [504, [17, 1], [[50, 22, 14], [51, 23, 14]]]],
			19: [445, 3560, 1063, 644, 442, 272, [546, [17, 4], [[47, 21, 13], [48, 22, 13]]]],
			20: [485, 3880, 1159, 702, 482, 297, [600, [15, 5], [[54, 24, 15], [55, 25, 15]]]],
			21: [512, 4096, 1224, 742, 509, 314, [644, [17, 6], [[50, 22, 14], [51, 23, 14]]]],
			22: [568, 4544, 1358, 823, 565, 348, [690, [7, 16], [[54, 24, 15], 55, 25, 15]]],
			23: [614, 4912, 1468, 890, 611, 376, [750, [11, 14], [[54, 24, 15], [55, 25, 15]]]],
			24: [664, 5312, 1588, 963, 661, 407, [810, [11, 16], [[54, 24, 15], [55, 25, 15]]]],
			25: [718, 5744, 1718, 1041, 715, 440, [870, [7, 22], [[54, 24, 15], [55, 25, 15]]]],
			26: [754, 6032, 1804, 1094, 751, 462, [962, [28, 6], [[50, 22, 14], [51, 23, 14]]]],
			27: [808, 6464, 1933, 1172, 805, 496, [1020, [8, 26], [[53, 23, 15], [54, 24, 15]]]],
			28: [871, 6968, 2085, 1263, 868, 534, [1050, [4, 31], [[54, 24, 15], [55, 25, 15]]]],
			29: [911, 7288, 2181, 1322, 908, 559, [1140, [1, 37], [[53, 23, 15], [54, 24, 15]]]],
			30: [985, 7880, 2358, 1429, 982, 604, [1200, [15, 25], [[54, 24, 15], [55, 25, 15]]]],
			31: [1033, 8264, 2473, 1499, 1030, 634, [1290, [42, 1], [[54, 24, 15], [55, 25, 15]]]],
			32: [1115, 8920, 2670, 1618, 1112, 684, [1350, [10, 35], [[54, 24, 15], [55, 25, 15]]]],
			33: [1171, 9368, 2805, 1700, 1168, 719, [1440, [29, 19], [[54, 24, 15], [55, 25, 15]]]],
			34: [1231, 9848, 2949, 1787, 1228, 756, [1530, [44, 7], [[54, 24, 15], [55, 25, 15]]]],
			35: [1286, 10288, 3081, 1867, 1283, 790, [1590, [39, 14], [[54, 24, 15], [55, 25, 15]]]],
			36: [1354, 10832, 3244, 1966, 1351, 832, [1680, [46, 10], [[54, 24, 15], [55, 25, 15]]]],
			37: [1426, 11408, 3417, 2071, 1423, 876, [1770, [49, 10], [[54, 24, 15], [55, 25, 15]]]],
			38: [1502, 12016, 3599, 2181, 1499, 923, [1860, [48, 14], [[54, 24, 15], [55, 25, 15]]]],
			39: [1582, 12656, 3791, 2298, 1579, 972, [1950, [43, 22], [[54, 24, 15], [55, 25, 15]]]],
			40: [1666, 13328, 3993, 2420, 1663, 1024, [2040, [34, 34], [54, 24, 15], [55, 25, 15]]]
		}),
		ECL_H: OrderedDict({
			1: [9, 72, 17, 10, 7, 4, [17, [1], [[26, 9, 8]]]],
			2: [16, 128, 34, 20, 14, 8, [28, [1], [[44, 16, 14]]]],
			3: [26, 208, 58, 35, 24, 15, [44, [2], [[35, 13, 11]]]],
			4: [36, 288, 82, 50, 34, 21, [64, [4], [[25, 9, 8]]]],
			5: [46, 368, 106, 64, 44, 27, [88, [2, 2], [[33, 11, 11], [34, 12, 11]]]],
			6: [60, 480, 139, 84, 58, 36, [112, [4], [[43, 15, 14]]]],
			7: [66, 528, 154, 93, 64, 39, [130, [4, 1], [[39, 13, 13], [40, 14, 13]]]],
			8: [86, 688, 202, 122, 84, 52, [156, [4, 2], [[40, 14, 13], [41, 15, 13]]]],
			9: [100, 800, 235, 143, 98, 60, [192, [4, 4], [[36, 12, 12], [37, 13, 12]]]],
			10: [122, 976, 288, 174, 119, 74, [224, [6, 2], [[43, 15, 14], [44, 16, 14]]]],
			11: [140, 1120, 331, 200, 137, 85, [264, [3, 8], [[36, 12, 12], [37, 13, 12]]]],
			12: [158, 1264, 374, 227, 155, 96, [308, [7, 4], [[42, 14, 14], [43, 15, 14]]]],
			13: [180, 1440, 427, 259, 177, 109, [352, [12, 4], [[33, 11, 11], [34, 12, 11]]]],
			14: [197, 1576, 468, 283, 194, 120, [384, [11, 5], [[36, 12, 12], [37, 13, 12]]]],
			15: [223, 1784, 530, 321, 220, 136, [432, [11, 7], [[36, 12, 12], [37, 13, 12]]]],
			16: [253, 2024, 602, 365, 250, 154, [480, [3, 13], [[45, 15, 15], [46, 16, 15]]]],
			17: [283, 2264, 674, 408, 280, 173, [532, [2, 17], [[42, 14, 14], [43, 15, 14]]]],
			18: [313, 2504, 746, 452, 310, 191, [588, [2, 19], [[42, 14, 14], [43, 15, 14]]]],
			19: [341, 2728, 813, 493, 338, 208, [650, [9, 16], [[39, 13, 13], 40, 14, 13]]],
			20: [385, 3080, 919, 557, 382, 235, [700, [15, 10], [[43, 15, 14], [44, 16, 14]]]],
			21: [406, 3248, 969, 587, 403, 248, [750, [19, 6], [46, 16, 15], [47, 17, 15]]],
			22: [442, 3536, 1056, 640, 439, 270, [816, [34], [[37, 13, 12]]]],
			23: [464, 3712, 1108, 672, 461, 284, [900, [16, 14], [[45, 15, 15], [46, 16, 15]]]],
			24: [514, 4112, 1228, 744, 511, 315, [960, [30, 2], [[46, 16, 15], [47, 17, 15]]]],
			25: [538, 4304, 1286, 779, 535, 330, [1050, [22, 13], [[45, 15, 15], [46, 16, 15]]]],
			26: [596, 4768, 1425, 864, 593, 365, [1110, [33, 4], [[46, 16, 15], 47, 17, 15]]],
			27: [628, 5024, 1501, 910, 625, 385, [1200, [12, 28], [[45, 15, 15], [46, 16, 15]]]],
			28: [661, 5288, 1581, 958, 658, 405, [1260, [11, 31], [[45, 15, 15], [46, 16, 15]]]],
			29: [701, 5608, 1677, 1016, 698, 430, [1350, [19, 26], [[45, 15, 15], [46, 16, 15]]]],
			30: [745, 5960, 1782, 1080, 742, 457, [1440, [23, 25], [[45, 15, 15], [46, 16, 15]]]],
			31: [793, 6344, 1897, 1150, 790, 486, [1530, [23, 28], [[45, 15, 15], [46, 16, 15]]]],
			32: [845, 6760, 2022, 1226, 842, 518, [1620, [19, 35], [[45, 15, 15], [46, 16, 15]]]],
			33: [901, 7208, 2157, 1307, 898, 553, [1710, [11, 46], [[45, 15, 15], [46, 16, 15]]]],
			34: [961, 7688, 2301, 1394, 958, 590, [1800, [59, 1], [[46, 16, 15], [47, 17, 15]]]],
			35: [986, 7888, 2361, 1431, 983, 605, [1890, [22, 41], [[45, 15, 15], [46, 16, 15]]]],
			36: [1054, 8432, 2524, 1530, 1051, 647, 1980, [2, 64], [[45, 15, 15], [46, 16, 15]]],
			37: [1096, 8768, 2625, 1591, 1093, 673, [2100, [24, 46], [[45, 15, 15], [46, 16, 15]]]],
			38: [1142, 9136, 2735, 1658, 1139, 701, [2220, [42, 32], [[45, 15, 15], [46, 16, 15]]]],
			39: [1222, 9776, 2927, 1774, 1219, 750, [2310, [10, 67], [[45, 15, 15], [46, 16, 15]]]],
			40: [1276, 10208, 3057, 1852, 1273, 784, [2430, [20, 61], [[45, 15, 15], [46, 16, 15]]]]
		})
	}
